package br.com.qualityempresa.seguranca

class SegurancaFilters {

	def filters = {
		autorizacao(controller: '*', action: '*') {
			before = {
				println "."
				println "CONTROLLER:ACTION -> $controllerName:$actionName"

				def AutorizacaoUtils autorizacaoUtils = new AutorizacaoUtils()
				def AutenticacaoUtils autenticacaoUtils = new AutenticacaoUtils()
				def usuarioLogado = autenticacaoUtils.getUsuarioAutenticado()
				
				if (autorizacaoUtils.verificarPermissao(controllerName, actionName)) {
					return true
				} else {
					if (autenticacaoUtils.isUsuarioAutenticado()) {
						if (isAcessoPerfil(controllerName, actionName)) {
							if (params.id.toString().equals(usuarioLogado.id.toString())) {
								return true
							}
						}
						redirect(controller:"painel", action:"acessoNegado")
						return false
					} else {
						redirect(controller:"painel", action:"login")
						return false
					}
				}
			}
		}
	}

	private boolean isAcessoPerfil(String controle, String acao) {
		return controle.equals("usuario") && (acao.equals("perfil") || acao.equals("show") || acao.equals("edit") || acao.equals("update"))
	}
}
